package veterinaria.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import veterinaria.excepcion.DAOExcepcion;
import veterinaria.modelo.Cita;
//import veterinaria.modelo.Cita;
import veterinaria.util.ConexionBD;

public class CitaDAO extends BaseDAO {
	
	
	public Collection<Cita> listar() throws DAOExcepcion {
	Collection<Cita> c = new ArrayList<Cita>();
	Connection con = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	try {
		con = ConexionBD.obtenerConexion();
		String query = "select idCita,Paciente_idPaciente,feCita,feRegistro,dsVacuna,activo from Cita order by feCita";
		stmt = con.prepareStatement(query);
		rs = stmt.executeQuery();
		while (rs.next()) {
			Cita vo = new Cita();
			vo.setIdCita(rs.getInt("idCita"));				
			vo.setPaciente_IdPaciente(rs.getInt("Paciente_idPaciente"));
			vo.setFeCita(rs.getDate("feCita"));
			vo.setFeRegistro(rs.getDate("feRegistro"));
			vo.setDsVacuna(rs.getString("dsVacuna"));
			vo.setActivo(rs.getString("activo"));
			c.add(vo);
		}

	} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOExcepcion(e.getMessage());
	} finally {
		this.cerrarResultSet(rs);
		this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
	return c;
	}
	
	
	public Collection<Cita> buscarPorPaciente(String idPaciente)	throws DAOExcepcion {
		String query = "select c.idCita,c.paciente_idPaciente,c.feCita,c.feRegistro,c.dsVacuna from Cita c inner join Paciente p on p.idPaciente=c.Paciente_idPaciente where p.idPaciente like ?  or p.idPaciente is null";
		Collection<Cita> lista = new ArrayList<Cita>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try
		{
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1,"%" + idPaciente + "%");
			rs = stmt.executeQuery();
			while (rs.next()) {
				Cita vo = new Cita();
				vo.setIdCita(rs.getInt("idCita"));
				vo.setPaciente_IdPaciente(rs.getInt("paciente_idPaciente"));	
				vo.setPaciente_IdPaciente(rs.getInt("paciente_idPaciente"));
				vo.setFeCita(rs.getDate("feCita"));
				vo.setFeRegistro(rs.getDate("feRegistro"));
				vo.setDsVacuna(rs.getString("dsVacuna"));				
				lista.add(vo);
			}
		}
		catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}
		finally
		{
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		//System.out.println(lista.size());
		return lista;
		}	
	
	
	public Cita obtener(int idCita) throws DAOExcepcion {
	Cita vo = new Cita();
	Connection con = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	try {
		String query = "Select idCita,Paciente_idPaciente,feCita,feRegistro,dsVacuna,activo from Cita where idCita=?";
		con = ConexionBD.obtenerConexion();
		stmt = con.prepareStatement(query);
		stmt.setInt(1, idCita);
		rs = stmt.executeQuery();
		if (rs.next()) {
			vo.setIdCita(rs.getInt(1));
			vo.setPaciente_IdPaciente(rs.getInt(2));
			vo.setFeCita(rs.getDate(3));			
			vo.setFeRegistro(rs.getDate(4));				
			vo.setDsVacuna(rs.getString(5));
			vo.setActivo(rs.getString(6));
		}
	} catch (SQLException e) {
		System.err.println(e.getMessage());
		throw new DAOExcepcion(e.getMessage());
	} finally {
		this.cerrarResultSet(rs);
		this.cerrarStatement(stmt);
		this.cerrarConexion(con);
	}
	return vo;
	}
	
		public void insertar(Cita vo) throws DAOExcepcion {
		String query = "insert into Cita(feCita, feRegistro, dsVacuna, activo) values (?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		//ResultSet rs = null;
		try
		{
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1,vo.getPaciente_IdPaciente() );
			stmt.setDate(2, (Date)vo.getFeCita());
			stmt.setDate(3,(Date)vo.getFeRegistro());
			stmt.setString(4,vo.getDsVacuna());
			stmt.setString(5,vo.getActivo());
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
			// Obtener el ultimo id
			//int id = 0;
			//query = "select last_insert_id()";
			//stmt = con.prepareStatement(query);
			//rs = stmt.executeQuery();
			//if (rs.next()) {
			//	id = rs.getInt(1);
			//}
			//vo.setIdCita(id);

		}
		catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}
		finally
		{
			//this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		//return vo;
		}



		public void eliminar(int idCita) throws DAOExcepcion {
		String query = "delete from Cita WHERE idCita=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, idCita);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		}

		public Cita actualizar(Cita vo) throws DAOExcepcion {
		String query = "update Cita set paciente_IdPaciente=?, feCita=?, feRegistro=?, dsVacuna=?, activo=? where idCita=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1,vo.getPaciente_IdPaciente() );
			stmt.setDate(2,(Date)vo.getFeCita());
			stmt.setDate(3,(Date)vo.getFeRegistro());
			stmt.setString(4,vo.getDsVacuna());
			stmt.setString(5,vo.getActivo());
			stmt.setInt(6,vo.getIdCita());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
		}

		
		
		public Collection<Cita> buscarPorPacienteFecha(int idPaciente, String fecha1, String fecha2)	throws DAOExcepcion {
			String query = "select idCita,Paciente_idPaciente,feCita,feRegistro,dsVacuna,activo from Cita where Paciente_idPAciente = ? and feCita between ? and ?";
			Collection<Cita> lista = new ArrayList<Cita>();
			Connection con = null;
			PreparedStatement stmt = null;
			ResultSet rs = null;
			try
			{
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				stmt.setInt(1, idPaciente);
				stmt.setString(2, fecha1);
				stmt.setString(3, fecha2);
				rs = stmt.executeQuery();
				while (rs.next()) {
					Cita vo = new Cita();
					vo.setIdCita(rs.getInt("idCita"));				
					vo.setPaciente_IdPaciente(rs.getInt("Paciente_idPaciente"));
					vo.setFeCita(rs.getDate("feCita"));
					vo.setFeRegistro(rs.getDate("feRegistro"));
					vo.setDsVacuna(rs.getString("dsVacuna"));
					vo.setActivo(rs.getString("activo"));
					lista.add(vo);
				}
			}
			catch (SQLException e) {
				System.err.println(e.getMessage());
				throw new DAOExcepcion(e.getMessage());
			}
			finally
			{
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			//System.out.println(lista.size());
			return lista;
			}
		

}




